/**
 * @Description:
 * @author maybe
 * @date
 */
const { varifyToken } = require('../utils/methold')
const consola = require("consola");
module.exports = function () {
  return async (ctx, next) => {
    // 对前端展示、登录、注册等路由进行放行
    if (ctx.path.includes('login') || ctx.path.includes('notifyOrder')) {
      await next()
    } else {
      // 判断headers 中是否存在 authorization
      if (ctx.headers && ctx.headers.authorization === undefined) {
        ctx.status = 401
        ctx.body = {
          status: 401,
          msg: '无效token，没有访问权限'
        }
      } else {
        try {
          // 若存在，验证 token 是否等于当前登录用户的用户名，等于的话，再判断此用户的角色表中的 permission 字段
          // 是否存在 ctx.url ，是的话 next()，否则未授权
          // 在else中再深入判断它是否能够访问该接口的权限就是啦{验证token，判断用户是否有权限能访问此接口路径}
          const token = ctx.headers.authorization

          // 解密token
          await varifyToken(token)
          // roles:['管理员']，转为字符串
          await next()
        } catch (err) {
          // 捕获 jwt 的异常信息
          if (err.message === 'jwt expired') {
            ctx.status = 50014
            ctx.body = {
              code: 50014,
              msg: 'token 过期'
            }
          } else if (err.message === 'jwt malformed') {
            ctx.status = 50008
            ctx.body = {
              code: 50008,
              msg: 'token 无效'
            }
          } else {
            ctx.status = 500
            ctx.body = {
              code: 500,
              msg: err.message
            }
          }
        }
      }
    }
  }
}
